﻿#pragma once

#include "../Server/MirEnvir/Envir.h"
#include "../Shared/Data/Stat.h"
#include <vector>
#include <limits>
#include <any>
#include "../stringhelper.h"

using namespace Server::MirEnvir;
using namespace Shared::Extensions;

namespace Server
{
    class BalanceConfigForm : public System::Windows::Forms::Form
    {
    public:
        virtual ~BalanceConfigForm()
        {
            delete components;
            delete MagicResistWeigttextbox;
            delete label2;
            delete PoisonResistWeighttextbox;
            delete label3;
            delete CritialRateWeighttextbox;
            delete label5;
            delete CriticalDamagetextbox;
            delete label7;
            delete tabControl1;
            delete tabPage2;
            delete PoisonAttackWeighttextbox;
            delete label11;
            delete FreezingWeighttextbox;
            delete label10;
            delete groupBox2;
            delete CanFreezecheckBox;
            delete CanResistPoisoncheckBox;
            delete CanResistMagiccheckBox;
            delete ManaRegenWeighttextBox;
            delete label37;
            delete HealthRegenWeighttextBox;
            delete label35;
            delete tabPage4;
            delete groupBox3;
            delete groupBox6;
            delete groupBox5;
            delete groupBox4;
            delete label40;
            delete RISIndexcomboBox;
            delete label62;
            delete label61;
            delete label60;
            delete label59;
            delete label58;
            delete label57;
            delete label56;
            delete label55;
            delete label54;
            delete label53;
            delete label52;
            delete label51;
            delete label50;
            delete label49;
            delete label48;
            delete label47;
            delete label46;
            delete label45;
            delete label44;
            delete label43;
            delete label42;
            delete label41;
            delete RISLuckMaxStattextBox;
            delete RISAttackSpeedMaxStattextBox;
            delete RISPoisonAttackMaxStattextBox;
            delete RISFreezingMaxStattextBox;
            delete RISCriticalDamageMaxStattextBox;
            delete RISCriticalRateMaxStattextBox;
            delete RISPoisonRecovMaxStattextBox;
            delete RISMpRecovMaxStattextBox;
            delete RISHpRecovMaxStattextBox;
            delete RISPoisonResistMaxStattextBox;
            delete RISMagicResistMaxStattextBox;
            delete RISStrongMaxStattextBox;
            delete RISMaxMpMaxStattextBox;
            delete RISMaxHpMaxStattextBox;
            delete RISMaxAgilMaxStattextBox;
            delete RISMaxAccMaxStattextBox;
            delete RISMaxScMaxStattextBox;
            delete RISMaxMcMaxStattextBox;
            delete RISMaxDcMaxStattextBox;
            delete RISMaxMacMaxStattextBox;
            delete RISMaxAcMaxStattextBox;
            delete RISMaxDuraMaxStattextBox;
            delete RISLuckStatChancetextBox;
            delete RISMaxDuraStatChancetextBox;
            delete RISAttackSpeedStatChancetextBox;
            delete RISMaxAcStatChancetextBox;
            delete RISPoisonAttackStatChancetextBox;
            delete RISMaxMacStatChancetextBox;
            delete RISFreezingStatChancetextBox;
            delete RISMaxDcStatChancetextBox;
            delete RISCriticalDamageStatChancetextBox;
            delete RISMaxMcStatChancetextBox;
            delete RISCriticalRateStatChancetextBox;
            delete RISMaxScStatChancetextBox;
            delete RISPoisonRecovStatChancetextBox;
            delete RISMaxAccStatChancetextBox;
            delete RISMpRecovStatChancetextBox;
            delete RISMaxAgilStatChancetextBox;
            delete RISHpRecovStatChancetextBox;
            delete RISMaxHpStatChancetextBox;
            delete RISPoisonResistStatChancetextBox;
            delete RISMaxMpStatChancetextBox;
            delete RISMagicResistStatChancetextBox;
            delete RISStrongStatChancetextBox;
            delete RISLuckChancetextBox;
            delete RISAttackSpeedChancetextBox;
            delete RISPoisonAttackChancetextBox;
            delete RISFreezingChancetextBox;
            delete RISCriticalDamageChancetextBox;
            delete RISCriticalRateChancetextBox;
            delete RISPoisonRecovChancetextBox;
            delete RISMpRecovChancetextBox;
            delete RISHpRecovChancetextBox;
            delete RISPoisonResistChancetextBox;
            delete RISMagicResistChancetextBox;
            delete RISStrongChancetextBox;
            delete RISMaxMpChancetextBox;
            delete RISMaxHpChancetextBox;
            delete RISMaxAgilChancetextBox;
            delete RISMaxAccChancetextBox;
            delete RISMaxScChancetextBox;
            delete RISMaxMcChancetextBox;
            delete RISMaxDcChancetextBox;
            delete RISMaxMacChancetextBox;
            delete RISMaxAcChancetextBox;
            delete RISMaxDuraChancetextBox;
            delete RISDeleteIndexbutton;
            delete RISAddIndexbutton;
            delete RISCurseChancetextBox;
            delete label63;
            delete label64;
            delete RISSlotMaxStattextBox;
            delete RISSlotStatChancetextBox;
            delete RISSlotChancetextBox;
            delete tabPage3;
            delete classGridView;
            delete ClassComboBox;
            delete lblClassStatExample;
            delete panel2;
            delete BaseStatType;
            delete BaseStatFormula;
            delete BaseStatBase;
            delete BaseStatGain;
            delete BaseStatGainRate;
            delete BaseStatMax;
            delete panel1;
            delete classCapGridView;
            delete CapType;
            delete Value;
        }

        Server::MirEnvir::Envir *getEnvir() const;
        unsigned char SelectedClassID = 0;

        bool BaseStatsChanged = false;
        bool RandomItemStatsChanged = false;
        bool GuildsChanged = false;

        bool Populating = false;

        BalanceConfigForm();

    private:
        void BalanceConfigForm_FormClosed(std::any sender, FormClosedEventArgs *e);

        void tabControl1_SelectedIndexChanged(std::any sender, EventArgs *e);

        void ClassComboBox_SelectedIndexChanged(std::any sender, EventArgs *e);

        void UpdateStatInterface();

        void UpdateRandomItemStats();

        #pragma region ItemStats

        void MagicResistWeigttextbox_TextChanged(std::any sender, EventArgs *e);

        void PoisonResistWeighttextbox_TextChanged(std::any sender, EventArgs *e);

        void CritialRateWeighttextbox_TextChanged(std::any sender, EventArgs *e);

        void CriticalDamagetextbox_TextChanged(std::any sender, EventArgs *e);

        void FreezingWeighttextbox_TextChanged(std::any sender, EventArgs *e);

        void PoisonAttackWeighttextbox_TextChanged(std::any sender, EventArgs *e);

        void CanResistMagiccheckBox_CheckedChanged(std::any sender, EventArgs *e);

        void CanResistPoisoncheckBox_CheckedChanged(std::any sender, EventArgs *e);

        void CanFreezecheckBox_CheckedChanged(std::any sender, EventArgs *e);

        void HealthRegenWeighttextBox_TextChanged(std::any sender, EventArgs *e);

        void ManaRegenWeighttextBox_TextChanged(std::any sender, EventArgs *e);

        #pragma endregion

        #pragma region RandomItemStat
        void RISIndexcomboBox_SelectedIndexChanged(std::any sender, EventArgs *e);

        void RISAddIndexbutton_Click(std::any sender, EventArgs *e);

        void RISDeleteIndexbutton_Click(std::any sender, EventArgs *e);

        void RISMaxDuraChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxDuraStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxDuraMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAcChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAcStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAcMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMacChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMacStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMacMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxDcChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxDcStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxDcMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMcChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMcStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMcMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxScChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxScStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxScMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAccChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAccStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAccMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAgilChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAgilStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxAgilMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxHpChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxHpStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxHpMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMpChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMpStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMaxMpMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISStrongChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISStrongStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISStrongMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMagicResistChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMagicResistStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMagicResistMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonResistChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonResistStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonResistMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISHpRecovChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISHpRecovStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISHpRecovMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMpRecovChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMpRecovStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISMpRecovMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonRecovChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonRecovStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonRecovMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalRateChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalRateStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalRateMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalDamageChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalDamageStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCriticalDamageMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISFreezingChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISFreezingStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISFreezingMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonAttackChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonAttackStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISPoisonAttackMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISAttackSpeedChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISAttackSpeedStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISAttackSpeedMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISLuckChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISLuckStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISLuckMaxStattextBox_TextChanged(std::any sender, EventArgs *e);

        void RISCurseChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISSlotChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISSlotStatChancetextBox_TextChanged(std::any sender, EventArgs *e);

        void RISSlotMaxStattextBox_TextChanged(std::any sender, EventArgs *e);
        #pragma endregion

        #pragma region Class
        void classGridView_CellValidating(std::any sender, DataGridViewCellValidatingEventArgs *e);

        void classGridView_DefaultValuesNeeded(std::any sender, DataGridViewRowEventArgs *e);

        void classGridView_CellValueChanged(std::any sender, DataGridViewCellEventArgs *e);

        void classGridView_SelectionChanged(std::any sender, EventArgs *e);

        void classGridView_UserDeletedRow(std::any sender, DataGridViewRowEventArgs *e);

        void classCapGridView_CellValidating(std::any sender, DataGridViewCellValidatingEventArgs *e);

        void classCapGridView_CellValueChanged(std::any sender, DataGridViewCellEventArgs *e);

        void classCapGridView_DefaultValuesNeeded(std::any sender, DataGridViewRowEventArgs *e);

        void classCapGridView_UserDeletedRow(std::any sender, DataGridViewRowEventArgs *e);

        void UpdateClassStatExample(Stat type);

        void UpdateClassStatGridView();

        void UpdateClassCapGridView();

        void UpdateBaseStatData();

        void UpdateCapStatData();

        #pragma endregion


        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::IContainer *components = nullptr;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected:
        void Dispose(bool disposing) override;

        #pragma region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
    private:
        void InitializeComponent();

        #pragma endregion
        System::Windows::Forms::TextBox *MagicResistWeigttextbox;
        System::Windows::Forms::Label *label2;
        System::Windows::Forms::TextBox *PoisonResistWeighttextbox;
        System::Windows::Forms::Label *label3;
        System::Windows::Forms::TextBox *CritialRateWeighttextbox;
        System::Windows::Forms::Label *label5;
        System::Windows::Forms::TextBox *CriticalDamagetextbox;
        System::Windows::Forms::Label *label7;
        System::Windows::Forms::TabControl *tabControl1;
        System::Windows::Forms::TabPage *tabPage2;
        System::Windows::Forms::TextBox *PoisonAttackWeighttextbox;
        System::Windows::Forms::Label *label11;
        System::Windows::Forms::TextBox *FreezingWeighttextbox;
        System::Windows::Forms::Label *label10;
        System::Windows::Forms::GroupBox *groupBox2;
        System::Windows::Forms::CheckBox *CanFreezecheckBox;
        System::Windows::Forms::CheckBox *CanResistPoisoncheckBox;
        System::Windows::Forms::CheckBox *CanResistMagiccheckBox;
        System::Windows::Forms::TextBox *ManaRegenWeighttextBox;
        System::Windows::Forms::Label *label37;
        System::Windows::Forms::TextBox *HealthRegenWeighttextBox;
        System::Windows::Forms::Label *label35;
        System::Windows::Forms::TabPage *tabPage4;
        System::Windows::Forms::GroupBox *groupBox3;
        System::Windows::Forms::GroupBox *groupBox6;
        System::Windows::Forms::GroupBox *groupBox5;
        System::Windows::Forms::GroupBox *groupBox4;
        System::Windows::Forms::Label *label40;
        System::Windows::Forms::ComboBox *RISIndexcomboBox;
        System::Windows::Forms::Label *label62;
        System::Windows::Forms::Label *label61;
        System::Windows::Forms::Label *label60;
        System::Windows::Forms::Label *label59;
        System::Windows::Forms::Label *label58;
        System::Windows::Forms::Label *label57;
        System::Windows::Forms::Label *label56;
        System::Windows::Forms::Label *label55;
        System::Windows::Forms::Label *label54;
        System::Windows::Forms::Label *label53;
        System::Windows::Forms::Label *label52;
        System::Windows::Forms::Label *label51;
        System::Windows::Forms::Label *label50;
        System::Windows::Forms::Label *label49;
        System::Windows::Forms::Label *label48;
        System::Windows::Forms::Label *label47;
        System::Windows::Forms::Label *label46;
        System::Windows::Forms::Label *label45;
        System::Windows::Forms::Label *label44;
        System::Windows::Forms::Label *label43;
        System::Windows::Forms::Label *label42;
        System::Windows::Forms::Label *label41;
        System::Windows::Forms::TextBox *RISLuckMaxStattextBox;
        System::Windows::Forms::TextBox *RISAttackSpeedMaxStattextBox;
        System::Windows::Forms::TextBox *RISPoisonAttackMaxStattextBox;
        System::Windows::Forms::TextBox *RISFreezingMaxStattextBox;
        System::Windows::Forms::TextBox *RISCriticalDamageMaxStattextBox;
        System::Windows::Forms::TextBox *RISCriticalRateMaxStattextBox;
        System::Windows::Forms::TextBox *RISPoisonRecovMaxStattextBox;
        System::Windows::Forms::TextBox *RISMpRecovMaxStattextBox;
        System::Windows::Forms::TextBox *RISHpRecovMaxStattextBox;
        System::Windows::Forms::TextBox *RISPoisonResistMaxStattextBox;
        System::Windows::Forms::TextBox *RISMagicResistMaxStattextBox;
        System::Windows::Forms::TextBox *RISStrongMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxMpMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxHpMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxAgilMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxAccMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxScMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxMcMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxDcMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxMacMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxAcMaxStattextBox;
        System::Windows::Forms::TextBox *RISMaxDuraMaxStattextBox;
        System::Windows::Forms::TextBox *RISLuckStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxDuraStatChancetextBox;
        System::Windows::Forms::TextBox *RISAttackSpeedStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAcStatChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonAttackStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMacStatChancetextBox;
        System::Windows::Forms::TextBox *RISFreezingStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxDcStatChancetextBox;
        System::Windows::Forms::TextBox *RISCriticalDamageStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMcStatChancetextBox;
        System::Windows::Forms::TextBox *RISCriticalRateStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxScStatChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonRecovStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAccStatChancetextBox;
        System::Windows::Forms::TextBox *RISMpRecovStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAgilStatChancetextBox;
        System::Windows::Forms::TextBox *RISHpRecovStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxHpStatChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonResistStatChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMpStatChancetextBox;
        System::Windows::Forms::TextBox *RISMagicResistStatChancetextBox;
        System::Windows::Forms::TextBox *RISStrongStatChancetextBox;
        System::Windows::Forms::TextBox *RISLuckChancetextBox;
        System::Windows::Forms::TextBox *RISAttackSpeedChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonAttackChancetextBox;
        System::Windows::Forms::TextBox *RISFreezingChancetextBox;
        System::Windows::Forms::TextBox *RISCriticalDamageChancetextBox;
        System::Windows::Forms::TextBox *RISCriticalRateChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonRecovChancetextBox;
        System::Windows::Forms::TextBox *RISMpRecovChancetextBox;
        System::Windows::Forms::TextBox *RISHpRecovChancetextBox;
        System::Windows::Forms::TextBox *RISPoisonResistChancetextBox;
        System::Windows::Forms::TextBox *RISMagicResistChancetextBox;
        System::Windows::Forms::TextBox *RISStrongChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMpChancetextBox;
        System::Windows::Forms::TextBox *RISMaxHpChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAgilChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAccChancetextBox;
        System::Windows::Forms::TextBox *RISMaxScChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMcChancetextBox;
        System::Windows::Forms::TextBox *RISMaxDcChancetextBox;
        System::Windows::Forms::TextBox *RISMaxMacChancetextBox;
        System::Windows::Forms::TextBox *RISMaxAcChancetextBox;
        System::Windows::Forms::TextBox *RISMaxDuraChancetextBox;
        System::Windows::Forms::Button *RISDeleteIndexbutton;
        System::Windows::Forms::Button *RISAddIndexbutton;
        System::Windows::Forms::TextBox *RISCurseChancetextBox;
        System::Windows::Forms::Label *label63;
        System::Windows::Forms::Label *label64;
        System::Windows::Forms::TextBox *RISSlotMaxStattextBox;
        System::Windows::Forms::TextBox *RISSlotStatChancetextBox;
        System::Windows::Forms::TextBox *RISSlotChancetextBox;
        System::Windows::Forms::TabPage *tabPage3;
        System::Windows::Forms::DataGridView *classGridView;
        System::Windows::Forms::ComboBox *ClassComboBox;
        System::Windows::Forms::Label *lblClassStatExample;
        System::Windows::Forms::Panel *panel2;
        System::Windows::Forms::DataGridViewComboBoxColumn *BaseStatType;
        System::Windows::Forms::DataGridViewComboBoxColumn *BaseStatFormula;
        System::Windows::Forms::DataGridViewTextBoxColumn *BaseStatBase;
        System::Windows::Forms::DataGridViewTextBoxColumn *BaseStatGain;
        System::Windows::Forms::DataGridViewTextBoxColumn *BaseStatGainRate;
        System::Windows::Forms::DataGridViewTextBoxColumn *BaseStatMax;
        System::Windows::Forms::Panel *panel1;
        System::Windows::Forms::DataGridView *classCapGridView;
        System::Windows::Forms::DataGridViewComboBoxColumn *CapType;
        System::Windows::Forms::DataGridViewTextBoxColumn *Value;
    };
}
